package com.crm.system.service.cluePoolManager;

import com.alibaba.fastjson.JSONObject;
import com.crm.common.model.DhPageInfo;
import com.crm.model.entity.cluePoolManager.ClueFollow;
import com.crm.model.qo.cluePoolManager.ClueFollowQO;
import com.crm.model.qo.cluePoolManager.CustomerOnlineFollowQO;
import com.crm.model.vo.cluePoolManager.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * @ Author ：pym
 * @ Date   ：2021/1/8 13:05
 */
public interface ClueFollowService {
    /**
     * 线索池详情-线索清单-跟进记录
     * @param pageIndex     ---页码
     * @param pageSize      ---分页大小
     * @param clueId        ---线索Id
     * @return
     */
    DhPageInfo<ClueFollowVO> selectClueFollowVOList(Integer pageIndex, Integer pageSize, String clueId);

    /**
     * @author wll
     * info 用户模块-我的线索池-线索清单-添加跟进
     * @param clueFollowQO 线索跟进参数
     * @return
     */
    String addClueFollow(ClueFollowQO clueFollowQO);

    /**
     * 根据线索池id查询线索总跟进数
     * @param cluePoolId
     * @return
     */
    long selectClueFollowCountByPoolId(String cluePoolId);

    /**
     * @Description:根据客户id获取线索跟进记录
     * @Param:  customerId 客户id
     * @Author: luojie
     * @Date: 2021/3/15 18:55
     */
    List<ClueFollowContractVO> selectClueFollowListByCustomerId(String customerId);

    /**
     * 用户系统--客户管理>我的客户>跟进记录详情
     * @param clueFollowId  ---跟进记录主键
     * @param type 1:单品客户跟进详情
     * @author yincuimei
     * @return
     */
    ClueFollowVO selectClueFollowVOById(String clueFollowId, String type,Integer followWay);

    /**
     * 联系人详情-跟进记录查询-通过联系人id
     * @param contactId 联系人id
     * @param dateType  thisWeek 本周  thisMonth 本月
     * @return
     */
    DhPageInfo<ContactDetailFollowVO> selectFollowByContactId(Integer pageIndex,Integer pageSize,String sortName,String sortOrder,String contactId, String dateType);

    /**
     * 跟进记录
     * @param clueFollowQO
     * @param pageIndex
     * @param pageSize
     * @param sort
     * @param sortOrder
     * @return
     */
    DhPageInfo<ClueFollowVO> selectClueFollowList(ClueFollowQO clueFollowQO, Integer pageIndex, Integer pageSize, String sort, String sortOrder);

    /**
     * 图表数据获取
     * @Author renshaorong
     * @Date 2021/4/12
     * @param dateUnit---本周1/本月2/上月3
     * @param startTimeStr 开始日期
     * @param endTimeStr 结束日期
     * @return
     */
    List<ClueFollowChartVO> selectClueFollowChartVOList(int dateUnit, String startTimeStr, String endTimeStr);
    List<ClueFollowChartVO> selectAdminClueFollowChartVOList(String startTimeStr, String endTimeStr);

    /**
     * 折线图数据获取
     * @Author renshaorong
     * @Date 2021/4/13
     * @param dateUnit---本周1/本月2/上月3
     * @param startTimeStr 开始日期
     * @param endTimeStr 结束日期
     * @return
     */
    Map<String,Object> getPolyLine(Integer dateUnit, String startTimeStr, String endTimeStr);

    /**
     * 普管用户 折线图数据获取
     */
    Map<String,Object> getAdminPolyLine(String startTimeStr, String endTimeStr);

    /**
     * 总跟进次数饼状图数据获取
     * @Author renshaorong
     * @Date 2021/4/14
     * @param dateUnit---本周1/本月2/上月3
     * @param startTimeStr 开始日期
     * @param endTimeStr 结束日期
     * @return
     */
    List<Map> getNumPieData(Integer dateUnit, String startTimeStr, String endTimeStr);
    List<Map> getAdminNumPieData(String startTimeStr, String endTimeStr);

    /**
     * 获取商机状态饼状图数据
     * @Author renshaorong
     * @Date 2021/4/14
     * @param dateUnit
     * @param startTimeStr
     * @param endTimeStr
     * @param type
     * @return
     */
    List<Map<String,Object>> getBusinessStatusData(Integer dateUnit, String startTimeStr, String endTimeStr, Integer type);

    /**
     * 获取过程状态饼状图数据
     * @Author renshaorong
     * @Date 2021/4/14
     * @param dateUnit
     * @param startTimeStr
     * @param endTimeStr
     * @return
     */
    List<Map<String, Object>> getProcessStatusData(Integer dateUnit, String startTimeStr, String endTimeStr, Integer type);

    List<Map<String, Object>> getAdminProcessStatusData( String startTimeStr, String endTimeStr, Integer type);

    /**
     * 查询联系人最新的一条跟进记录
     * @param contactId 联系人id
     * @return
     */
    List<ClueFollow> getClueFollowByContactId(String contactId);

    /**
     * 客户线上跟进
     * @Author pym
     * @Date  2021/4/15 8:58
     * @param customerOnlineFollowQO -线上跟进参数
     * @return {@link {java.lang.Boolean}}
     */
    String customerOnlineFollowUp(CustomerOnlineFollowQO customerOnlineFollowQO);

    /**
     * 一机多用(线上跟进)
     * @param customerOnlineFollowQO
     * @return -String(返回跟进记录ID-用于保存一机多用跟进记录)
     * @author yincuimei
     */
    String oneMachineMultipleUses(CustomerOnlineFollowQO customerOnlineFollowQO);

    /**
     * 客户跟进详情关键字分词
     * @param followId
     */
    void followKeywordParticiple(String followId);


    /**
     * @Description: 导入跟进记录
     * @Param: [file]
     * @Return: void
     * @Author: lixq-f
     * @Date: 2021/6/8
    **/
    void clueFollowImportExcel(MultipartFile file);


    /**
     * @Description: 下载模板
     * @Param: []
     * @Return: void
     * @Author: lixq-f
     * @Date: 2021/6/8
    **/
    void downTemplate(HttpServletRequest req, HttpServletResponse resp);

    /**
     * 导入跟进记录
     * @param list
     * @param companyId
     * @return
     */
    JSONObject importFollow(List<ImportFollowVO> list, String companyId);

    /**
     * 线上电话  跟进详情修改
     * @param clueFollow 跟进记录
     * yincuimei 合用用户系统-跟进记录-跟进详情页面-可修改跟进详情(备注:如有修改请联调测试这个功能)
     * @return
     */
    Boolean updateClueFollow(ClueFollow clueFollow);

    /**
     * 根据Excel同步数据库跟进类型为空的数据
     * @param list
     * @param companyId
     */
    void importFollow2(List<ImportFollowVO> list, String companyId);

    /**
     * 返回通话记录的url
     * @param followId
     * @return
     */
    String getCallRecord(String followId);
}
